#include<iostream>
#include<vector>
#include<string>
#include<unistd.h>
#include<pthread.h>

//本代码目的：一些线程函数的使用

void* thread_routine(void* args)
{
    std::string threadname = static_cast<const char*>(args);
    while(true)
    {
        printf("new thread is running, name is : %s, new thread id: 0x%lx\n",
               threadname.c_str(), pthread_self());
        sleep(1);
    }
    
    //终止进程的函数调用
    //任何 一个线程，调用exit，都会导致进程退出，
    //变相的导致所有线程退出
    exit(10);

    // 方法1
    // pthread_exit(nullptr);
    // 方法2
    return nullptr;
    // 方法3
    // pthread_exit((void*)0);
    // pthread_exit((void*)1);
    // pthread_exit((void*)2);
    // pthread_exit((void*)3);  
    // pthread_exit((void*)4);
}

int main()
{
    pthread_t tid;
    int n = pthread_create(&tid,nullptr,thread_routine,(void*)"thread-1");
    (void)n;

    //pthread_self() 是 POSIX 线程（pthread）库 提供的一个函数，
    //用于 获取当前线程的 ID（线程标识符）。
    printf("mainthread create done, main thread is: 0x%lx, new thread id : 0x%lx\n"
        , pthread_self(), tid);

    sleep(2);
    // 方法三本来就是main取消其他线程的---最佳实践
    pthread_cancel(tid);

    // 得知新线程执行的结果：代码跑完，结果对还是不对！ 退出信息 = 信号 + 退出码，
    //难道，多线程这里，不考虑所谓的异常吗？？
    // 不用考虑，因为发生异常整个线程直接结束，没机会考虑！！！！
    void *ret;//错误内容写到这
    int m = pthread_join(tid,&ret);    
    if(m==0)
    {
         printf("new thread return val: %lld\n", (long long)ret);
    }
    sleep(3);

    printf("main thread end!, m is : %d\n", m);

    return 0;
}